]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
workspaceThumbnail: Update monitor index on 'monitors-changed'
authorJonas Ådahl <jadahl@gmail.com>
Wed, 14 Apr 2021 15:12:12 +0000 (17:12 +0200)
committerMarge Bot <marge-bot@gnome.org>
Wed, 14 Apr 2021 15:43:09 +0000 (15:43 +0000)
For the primary monitor workspace thumbnail, we must keep the monitor
index in sync with what is currently the primary monitor index,
otherwise we might end up trying to move windows to non-existing
monitors.

For example, if the primary monitor index was 1 when the thumbnail box
was created, but later, the primary monitor index changed to 0, with the
other monitor being turned off, moving a window to one of the workspaces
on the workspace thumbnail, gnome-shell would attempt to move it to the
monitor with the index the primary monitor had in the past, with the
problem being that that monitor no longer exists.

Fix this by listening on the 'monitors-changed' signal on the layout
manager, and update the monitor index of the primary workspace
thumbnails box. Make sure to connect to the signal before creating the
thumbnails box, as the thumbnails box itself will listen to the signal
and recreate its actual thumbnails, and it must do this with the up to
date monitor index.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4075
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1810>

js/ui/overviewControls.js
js/ui/workspaceThumbnail.js

index 10b97c7ac0652c3f7da5ffd76f859ea7be1fc08c..3b5ec583f906e5236d1babdff50a687aa29e2a88 100644 (file)
@@ -341,6 +341,9 @@ class ControlsManager extends St.Widget {
             this.dash.showAppsButton);
         this._searchController.connect('notify::search-active', this._onSearchChanged.bind(this));
 
+        Main.layoutManager.connect('monitors-changed', () => {
+            this._thumbnailsBox.setMonitorIndex(Main.layoutManager.primaryIndex);
+        });
         this._thumbnailsBox = new WorkspaceThumbnail.ThumbnailsBox(
             this._workspaceAdjustment, Main.layoutManager.primaryIndex);
         this._thumbnailsBox.connect('notify::should-show', () => {
index cf03756a55960203154e09f251a3eab8b33165e7..6c5a2bee4ab8d77cf84b3e8714ddfac913a0ffbe 100644 (file)
@@ -715,6 +715,10 @@ var ThumbnailsBox = GObject.registerClass({
             () => this._updateIndicator());
     }
 
+    setMonitorIndex(monitorIndex) {
+        this._monitorIndex = monitorIndex;
+    }
+
     _onDestroy() {
         this._unqueueUpdateStates();